module klang.klang.转换工厂.中间码转换.类型.中间码类型_;
import 全局;
import ··类型_ = klang.编译.类型.类型_;
import klang.编译.核心.核心_: 整数_, 词典_, 创建数组, 创建词典, 连接;
import klang.klang.语法节点.Klang节点_: 节点_ = Klang节点_, 源文件_ = Klang源文件_;
import klang.编译.语法节点.节点_: 基础节点_ = 节点_, 基础源文件_ = 源文件_;
import klang.编译.类型.类型_: 符号表_;
import klang.编译.工具.工具_: 创建符号表;
enum 实例化种类_ : long {
    类实例_ = 0L,
    类引用_ = 1L
}
class 未整合源文件_ {
    词典_!(long) 源文件组内索引;
    源文件_[] 整合的文件;
    基础节点_[] 类型声明组;
    基础节点_[] 全局声明组;
    基础节点_[] 函数定义组;
    基础节点_[] 函数声明组;
    符号表_ 源文件本地组;
    词典_!(dstring) 文本字面量Id;
    this() {
        this.源文件组内索引 = 创建词典!(long)();
        this.整合的文件 = 创建数组!(源文件_)();
        this.类型声明组 = 创建数组!(基础节点_)();
        this.全局声明组 = 创建数组!(基础节点_)();
        this.函数定义组 = 创建数组!(基础节点_)();
        this.函数声明组 = 创建数组!(基础节点_)();
        this.源文件本地组 = 创建符号表();
        this.文本字面量Id = 创建词典!(dstring)();
    }
    bool 是空的() {
        return this.类型声明组.length == 0 && this.全局声明组.length == 0 && this.函数定义组.length == 0 && this.函数声明组.length == 0;
    }
}
class 实例化内容_ {
    实例化种类_ 种类;
    this() { }
    this(实例化种类_ 种类) {
        this.种类 = 种类;
    }
}
class 类实例化内容_ : 实例化内容_ {
    基础节点_ TD;
    基础节点_ ClassZ;
    基础节点_ VtblZ;
    基础节点_ InitZ;
    this() {
        super(实例化种类_.类实例_);
        this.TD = ··null!(基础节点_);
        this.ClassZ = ··null!(基础节点_);
        this.VtblZ = ··null!(基础节点_);
        this.InitZ = ··null!(基础节点_);
    }
}
class 外部引用类实例化内容_ : 实例化内容_ {
    基础节点_ TD;
    基础节点_ ClassZ;
    基础节点_ VtblZ;
    基础节点_ InitZ;
    基础节点_ MT;
    基础节点_ MTInfo;
    this() {
        super(实例化种类_.类引用_);
        this.TD = ··null!(基础节点_);
        this.ClassZ = ··null!(基础节点_);
        this.VtblZ = ··null!(基础节点_);
        this.InitZ = ··null!(基础节点_);
        this.MT = ··null!(基础节点_);
        this.MTInfo = ··null!(基础节点_);
    }
}
class 未整合的泛型源文件_ : 未整合源文件_ {
    词典_!(实例化内容_) 已经实例化集合;
    词典_!(未整合源文件_) 未整合的源文件集合;
    this() {
        super();
        this.已经实例化集合 = 创建词典!(实例化内容_)();
        this.未整合的源文件集合 = 创建词典!(未整合源文件_)();
    }
}
